ACID হল চারটি মৌলিক বৈশিষ্ট্য যা একটি রিলেশনাল ডেটাবেস সিস্টেমের ট্রানজেকশন প্রক্রিয়া সঠিকভাবে সম্পাদিত হয়, তা নিশ্চিত করতে ব্যবহৃত হয়। এই চারটি প্রপার্টি হল:
- Atomicity
- Consistency
- Isolation
- Durability
এসব প্রপার্টি ডেটাবেসে ট্রানজেকশনের ইনটিগ্রিটি (integrity) এবং বিশ্বাসযোগ্যতা (reliability) রক্ষা করতে অত্যন্ত গুরুত্বপূর্ণ। চলুন, প্রতিটি প্রপার্টির বিস্তারিত আলোচনা করি।
১. Atomicity (অ্যাটমিকিটি)
Atomicity মানে "অ্যাটম" বা "পূর্ণ" হওয়া। এটি নিশ্চিত করে যে একটি ট্রানজেকশন সম্পূর্ণভাবে সফল হবে অথবা সম্পূর্ণভাবে ব্যর্থ হবে। অর্থাৎ, যদি একটি ট্রানজেকশনের কোনো অংশ ব্যর্থ হয়, তবে পুরো ট্রানজেকশনটি বাতিল হয়ে যাবে এবং ডেটাবেস তার পূর্বের অবস্থায় ফিরে যাবে। এটি "All or Nothing" নীতির মতো কাজ করে।
উদাহরণ: ধরা যাক, একটি ট্রানজেকশনে দুইটি অপারেশন চলছে — একটি ব্যাংক একাউন্ট থেকে টাকা অপসারণ করা এবং অন্য একাউন্টে জমা দেওয়া। যদি প্রথম অপারেশন সফল হয় কিন্তু দ্বিতীয় অপারেশন ব্যর্থ হয়, তবে Atomicity নিশ্চিত করবে যে প্রথম অপারেশনটি ফিরিয়ে নেওয়া হবে, যাতে ডেটাবেসে কোনো অসম্পূর্ণ পরিবর্তন না থাকে।
Atomicity এর উদাহরণ:
BEGIN TRANSACTION;
-- Debit 100 from Account A
UPDATE accounts SET balance = balance - 100 WHERE account_id = 'A';
-- Credit 100 to Account B
UPDATE accounts SET balance = balance + 100 WHERE account_id = 'B';
-- If any of the operations fail, rollback the transaction
COMMIT;
যদি কোনো এক্সিকিউটেড স্টেটমেন্ট ব্যর্থ হয়, সম্পূর্ণ ট্রানজেকশনটি রোলব্যাক করা হবে, এবং ডেটাবেসে কোনো পরিবর্তন ঘটবে না।
২. Consistency (সঙ্গতি)
Consistency প্রপার্টি নিশ্চিত করে যে একটি ট্রানজেকশন ডেটাবেসের এককতা (integrity) বজায় রাখে এবং শুরু থেকে শেষ পর্যন্ত ডেটাবেস সিস্টেমের পূর্বের অবস্থার সঙ্গে সঙ্গতিপূর্ণ থাকে। এটি ডেটাবেসের শর্তাবলী এবং নিয়মাবলী বজায় রাখার জন্য গুরুত্বপূর্ণ।
এটা নিশ্চিত করে যে:
- ট্রানজেকশনের পরে ডেটাবেসের ডেটা সঠিক থাকবে।
- ডেটাবেসের মধ্যে সমস্ত রুলস (যেমন Primary Key, Foreign Key, Unique Constraints, Check Constraints) বজায় থাকবে।
উদাহরণ: ধরা যাক, ডেটাবেসে একটি টেবিল আছে যেখানে age কলামটি ১৮ বছরের কম রাখা যাবে না। যদি আপনি এমন একটি ট্রানজেকশন চালান যা age ১৮ এর কম রাখে, তাহলে সিস্টেমটি ডেটাবেসের Consistency প্রপার্টি অনুসারে সেই ট্রানজেকশনকে ব্যর্থ করবে।
৩. Isolation (আনবাধিতা)
Isolation প্রপার্টি নিশ্চিত করে যে একাধিক ট্রানজেকশন একই ডেটাতে কাজ করার সময় একে অপরকে প্রভাবিত করবে না। একটি ট্রানজেকশন সম্পন্ন হওয়া পর্যন্ত অন্য কোনো ট্রানজেকশন তার ফলাফল দেখতে বা প্রভাবিত করতে পারবে না। একাধিক ট্রানজেকশন একসাথে কার্যকর হলে তাদের মধ্যে কোনো রেস কন্ডিশন (race condition) বা কনফ্লিক্ট হবে না।
Isolation বিভিন্ন স্তরে কার্যকর হতে পারে, যেমন:
- Read Uncommitted: এক ট্রানজেকশন অন্য ট্রানজেকশন দ্বারা সম্পন্ন হওয়া ডেটা পড়তে পারে, এমনকি যদি সেই ডেটা সম্পূর্ণরূপে কনফার্ম না হয়।
- Read Committed: এক ট্রানজেকশন কেবলমাত্র ডেটা পড়ে যা সম্পূর্ণরূপে কনফার্ম হয়েছে।
- Repeatable Read: এক ট্রানজেকশন একই ডেটাকে বারবার পড়তে পারবে এবং কোনো পরিবর্তন হবে না।
- Serializable: একাধিক ট্রানজেকশন একে অপরের দ্বারা প্রভাবিত হবে না এবং তারা একসাথে নির্বাহিত হতে পারবে না।
উদাহরণ: যদি দুটি ট্রানজেকশন একটি রেকর্ডে একই সময় সম্পাদনা করার চেষ্টা করে, Isolation এটি প্রতিরোধ করবে যাতে একটির কাজ অপরটির ফলাফলকে প্রভাবিত না করে।
৪. Durability (টেকসইতা)
Durability নিশ্চিত করে যে একটি ট্রানজেকশনের সম্পন্ন হওয়ার পর তার পরিবর্তন স্থায়ী হবে এবং সিস্টেম ক্র্যাশ বা বিদ্যুৎ চলে গেলেও তা হারাবে না। একবার ট্রানজেকশন সফলভাবে COMMIT হয়ে গেলে, তার পরিবর্তন ডেটাবেসে স্থায়ী হয়ে যাবে, এবং সেগুলি পুনরুদ্ধারযোগ্য হবে।
উদাহরণ: যখন একটি ট্রানজেকশন সফলভাবে COMMIT হয়, তখন সমস্ত ডেটা সিস্টেমে স্থায়ীভাবে সংরক্ষিত হবে। এমনকি যদি ডেটাবেস বা সিস্টেম ক্র্যাশও হয়, পরবর্তী সময়ে সিস্টেম পুনরুদ্ধার করা হলে সেই পরিবর্তনগুলো পাওয়া যাবে।
ACID Properties এর গুরুত্ব:
ACID প্রপার্টিগুলি ডেটাবেস ট্রানজেকশনকে সুরক্ষিত এবং সঠিকভাবে পরিচালনা করার জন্য অপরিহার্য। এগুলি নিশ্চিত করে যে:
- ডেটাবেসের ডেটা সংরক্ষণ এবং পরিবর্তন সঠিক এবং নির্ভরযোগ্যভাবে হয়।
- একাধিক ব্যবহারকারী একযোগে ডেটাবেসে কাজ করতে পারে, কিন্তু একে অপরের কাজের ওপর প্রভাব ফেলতে পারে না।
- কোনো অপ্রত্যাশিত পরিস্থিতিতে (যেমন সিস্টেম ক্র্যাশ) ডেটা হারানো বা অননুমোদিত পরিবর্তন হবে না।
এসব প্রপার্টি ডেটাবেসের বিশ্বাসযোগ্যতা এবং কার্যক্ষমতা নিশ্চিত করার জন্য খুবই গুরুত্বপূর্ণ।
Read more